const User = require('../models/user');
const jwt = require('jsonwebtoken');
const { jwtConfig } = require('../config/config');

// 注册控制器
exports.register = async (req, res) => {
    try {
        const { phone, password } = req.body;

        // 验证输入
        if (!phone || !password) {
            return res.status(400).json({
                success: false,
                message: '手机号和密码不能为空'
            });
        }

        // 创建新用户
        const userId = await User.create(phone, password);

        // 生成JWT令牌
        const token = jwt.sign(
            { userId, phone },
            jwtConfig.secret,
            { expiresIn: jwtConfig.expiresIn }
        );

        res.status(201).json({
            success: true,
            message: '注册成功',
            data: {
                token,
                user: {
                    id: userId,
                    phone,
                    username: phone, // 默认使用手机号作为用户名
                    nickname: phone  // 默认使用手机号作为昵称
                }
            }
        });
    } catch (error) {
        console.error('注册失败:', error);
        res.status(400).json({
            success: false,
            message: error.message || '注册失败，请稍后重试'
        });
    }
};

// 登录控制器
exports.login = async (req, res) => {
    try {
        const { phone, password } = req.body;

        // 验证输入
        if (!phone || !password) {
            return res.status(400).json({
                success: false,
                message: '手机号和密码不能为空'
            });
        }

        // 查找用户
        const user = await User.findByPhone(phone);
        if (!user) {
            return res.status(401).json({
                success: false,
                message: '手机号或密码错误'
            });
        }

        // 验证密码
        const isMatch = await User.verifyPassword(password, user.password);
        if (!isMatch) {
            return res.status(401).json({
                success: false,
                message: '手机号或密码错误'
            });
        }

        // 更新最后登录时间
        await User.updateLastLoginTime(user.user_id);

        // 生成JWT令牌
        const token = jwt.sign(
            { userId: user.user_id, phone: user.phone },
            jwtConfig.secret,
            { expiresIn: jwtConfig.expiresIn }
        );

        res.json({
            success: true,
            message: '登录成功',
            data: {
                token,
                user: {
                    id: user.user_id,
                    phone: user.phone,
                    username: user.username,
                    nickname: user.nickname,
                    avatar: user.avatar,
                    gender: user.gender,
                    level: user.level,
                    game_uid: user.game_uid
                }
            }
        });
    } catch (error) {
        console.error('登录失败:', error);
        res.status(500).json({
            success: false,
            message: '服务器错误，请稍后重试'
        });
    }
};